/****************************************************************************

	COPYRIGHT(C) MAXSI SOFTWARE, JONAS 'SORTIE' TERMANSEN 2008, 2009, 2010

    This file is part of Maxsi Engine.

    Maxsi Engine is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Maxsi Engine is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with Maxsi Engine. If not, see <http://www.gnu.org/licenses/>.

	*/ #include "MaxsiEngineContributors.h" /*

	If you modify this file, please enter your name below and provide contact
	information in MaxsiEngineContributors.h. For more information please see
	MaxsiEngineContributors.h.
	
	Contributors to this file:

	- Jonas 'Sortie' Termansen
	- [your name here]

	MaxsiEngine.dll
	A linkable version of Maxsi Engine

	MaxsiSHA.cpp
	Library for Secure Hash Algorihm stuff	

****************************************************************************/

#include "MaxsiEngine.h"
namespace MaxsiEngine
{
	LINK	char* CalculateSHA1(char* Buffer, size_t BufferLen)
	{
#if 0
		char* digest = new char[20];
		SHA1 sha;		
		sha.Update((byte*)Buffer, BufferLen);
		sha.Final((byte*)digest);
		return digest;
#else
		CSHA1 sha1;
		sha1.Update((unsigned char*)Buffer,(unsigned int)BufferLen);
		sha1.Final();
		char* HashData = new char[60];
		memset(HashData,0,60);
		sha1.ReportHash(HashData, CSHA1::REPORT_HEX);
		char* FinalHash = new char[41];
		for (int I = 0; I < 20; I++)
		{
			memcpy(FinalHash+2*I,HashData+3*I,2);
		}
		FinalHash[40] = 0;
		delete[] HashData;

		return FinalHash;
#endif
	}
}
